import axios from 'axios'
import {
  MessageBox,
  Message
} from 'element-ui'
import store from '@/store'

axios.defaults.headers.common['lastIp'] = sessionStorage.getItem("Ip")
// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // 当跨域请求时发送cookie
  timeout: 5000 // request timeout
})


service.interceptors.request.use(
  config => {
    config.headers.common['token'] = store.state.user.token
    return config
  },
  error => {
    Message({ message: error.msg, type: 'error', duration: 5 * 1000 })
    return error
  }
)

// response interceptor
service.interceptors.response.use(
  /**
   * 下面的注释为通过response自定义code来标示请求状态，当code返回如下情况为权限有问题，登出并返回到登录页
   * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
   */
  response => {
    const res = response.data
    //如果自定义代码不是200，就会被判定为错误。
    if (res.code !== 200) {
      Message({ message: res.msg || 'Error', type: 'error', duration: 5 * 1000 })
      if (res.code === 10200) {
        MessageBox.confirm('您已经登出，您可以取消停留在此页面，或再次登录', '确定登出', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload() // 为了重新实例化vue-router对象 避免bug
          })
        })
      }
      return Promise.reject(res)
    } else {
      axios.defaults.headers.common['userId'] = localStorage.getItem('ID')
      return res
    }
  },
  error => {
    Message({ message: error.msg, type: 'error', duration: 5 * 1000 })
    return Promise.reject(error)
  }
)

export default service
